// plugins/FileListPlugin.js
class FileListPlugin {
    constructor (options) {
        // 获取插件配置项
        this.filename = options && options.filename ? options.filename :
            'FILELIST.md';
    }
    apply(compiler) {
        // 注册 compiler 上的 emit 钩⼦
        compiler.hooks.emit.tapAsync('FileListPlugin', (compilation, cb) => {

            // 通过 compilation.assets 获取⽂件数量
            let len = Object.keys(compilation.assets).length;
            // 添加统计信息
            let content = `# ${len} file${len>1?'s':''} emitted by webpack\n\n`;
            // 通过 compilation.assets 获取⽂件名列表
            for(let filename in compilation.assets) {
                content += `${filename}\n`;
            }
            // 往 compilation.assets 中添加清单⽂件
            compilation.assets[this.filename] = {
                // 写⼊新⽂件的内容
                source: function() {
                    return content;
                },
                // 新⽂件⼤⼩（给 webapck 输出展示⽤）
                size: function() {
                    return content.length;
                }
            }
            // 执⾏回调，让 webpack 继续执⾏
            cb();
        })
    }
}

module.exports = FileListPlugin;
